Skip to content

Conversation

ree-gupta
Copy link
Member

@ree-gupta ree-gupta commented May 27, 2024

The PR adds columns for age_category, age_type, birthdate as discussed and suggested by @yarikoptic in #1826

This is open for discussion.

Related issues:

@bids-standard/bep032

TODO:

  • Add the info that either birthdate or age should be specified - decision to keep birthdate as optional and if age is specified, AgeReference must be used in sidecar JSON
  • Feedback on term name to include 'stage' to match UBERON - deviate slighly from UBERON and not use 'stage' in the enum names
  • Confirm introduction of AgeReference rule in schema for participant.tsv
  • Which key to use for age column definition that would specify that one must use AgeReference in sidecar?
  • Default for 'AgeReference'
  • Add rule that either birthdate or age must be specified
  • Formalized 'TermURL' as suggested by @yarikoptic here - ??
  • Resolve conflicts (definition was used - different from description and enums use)

@ree-gupta ree-gupta marked this pull request as ready for review July 17, 2024 14:13
@bendichter
Copy link
Contributor

What would be the best way to indicate that these fields are recommended for non-humans, but not recommended for humans?

@yarikoptic
Copy link
Collaborator

What would be the best way to indicate that these fields are recommended for non-humans, but not recommended for humans?

Besides birthday I think we can entirely avoid species-specificity here, but I liked phrasing to refer to units section on anonymization. I was looking at the stages and if someone annotates that it is late adult stage - it might help finding subjects of such interest. It is more of a question to me of duplicity of metadata, thus possibly leading to incongruities.

Copy link
Collaborator

@yarikoptic yarikoptic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

slight tune ups

name: age_type
display_name: Age type
description: |
Type of age measurement (e.g. `postnatal`, `fetal`, `gestational`). If not specified, `postnatal` is assumed.
Copy link
Collaborator

@yarikoptic yarikoptic Jul 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is there some ontology or controlled vocab to reference here as well by any chance?

@lzehl says "No!"

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@satra suggested this ontology https://bioportal.bioontology.org/ontologies/FMA/?p=classes&conceptid=http://purl.org/sig/ont/fma/fma312872 (in #1634) however this looks not like a species independent definition (definitions are also very sparse in this ontology)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if age_reference, some time points to consider:

  • fertilization
  • birth
  • gestation
  • ...

it seems we are boiling down to establishing a list of Enums with clear definitions and possibly adding TermURLs for some of them where there is a clear association.

TODO also to formalize such "TermURL" like linking at the level of schema which seems to lack it ATM.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fertilization
UBERON: http://purl.obolibrary.org/obo/GO_0009566
Definition: "The union of gametes of opposite sexes during the process of sexual reproduction to form a zygote. It involves the fusion of the gametic nuclei (karyogamy) and cytoplasm (plasmogamy)."

OR

We suggest a new UBERON term for the life cycle temporal boundaries:
start of embryo stage
UBERON: REQUEST TO ADD
Adapted definition for the usage here: "A life cycle temporal boundary that marks the start of the embryo stage of the organism."


start of neonate stage (synonym: birth)
UBERON: http://purl.obolibrary.org/obo/UBERON_0035946
Definition: "A life cycle temporal boundary that marks the start of the neonate stage of the organism."


Gestation is not covered in UBERON, but we can maybe request to add these terms:

gestational stage (life cycle stage)
UBERON: REQUEST TO ADD
Definition: "A life cycle stage that starts with the first day of the mother's last menstrual period and ends with birth."

start of gestational stage (life cycle boundary)
UBERON: REQUEST TO ADD
Definition: "A life cycle temporal boundary that marks the start of the gestational stage of the organism."

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if age_reference, some time points to consider:

* fertilization

* birth

* gestation

* ...

it seems we are boiling down to establishing a list of Enums with clear definitions and possibly adding TermURLs for some of them where there is a clear association.

TODO also to formalize such "TermURL" like linking at the level of schema which seems to lack it ATM.

Currently the 'TermURL' is a link in the description of the enums, so I am adding it to the overall PR TODO for discussion in the next BEP meeting or otherwise.

ree-gupta and others added 2 commits September 18, 2024 14:20
@lzehl
Copy link

lzehl commented Oct 16, 2024

@bendichter @yarikoptic I agree that only birth_date causes issues with humans due to GDPR.
For the age_category we use in openMINDS:
https://openminds-documentation.readthedocs.io/en/latest/instance_libraries/terminologies/ageCategory.html

This list is derived from the UBERON ontology where possible with small additions were needed. Note that openMINDS did not yet integrate all UBERON life cycle stages:
https://www.ebi.ac.uk/ols4/ontologies/uberon/classes/http%253A%252F%252Fpurl.obolibrary.org%252Fobo%252FUBERON_0000104?lang=en

age_type in addition to define the reference point of the age value is a good idea. I'm not sure if the ontology https://bioportal.bioontology.org/ontologies/FMA/?p=classes&conceptid=http://purl.org/sig/ont/fma/fma312872 suggested by @satra in #1634 is species independent defined (definitions are also very sparse in this ontology).

@ree-gupta
Copy link
Member Author

@lzehl @yarikoptic @bids-standard/bep032 As discussed in our last meeting, one of my TODOs was to add enums for age_caegory. Could one of you please remind me if we decided which ontology/list to use from the ones listed in the comment above?

@lzehl
Copy link

lzehl commented Nov 20, 2024

@ree-gupta https://openminds-documentation.readthedocs.io/en/latest/instance_libraries/terminologies/ageCategory.html for looking up the ones we use in openMINDS (sometimes we refined definitions compared to the ontology). We focused on the UBERON ontology for life cycle stage. Note that gestational stage is missing from this ontology (we could request to add it).

For life cycle temporal boundaries we can refer to some of UBERON, but we will have to contribute to complete this (or just define them ourselves as terminology). These terms should potentially be grouped under age_reference or age_temporal_boundary. This group would include for example: start of neonate stage (synonym: birth), start of embryo stage (synonym: fertilization), start of gestational stage, end of life cycle (synonym: death), etc.

name: age_type
display_name: Age type
description: |
Type of age measurement (e.g. `postnatal`, `fetal`, `gestational`). If not specified, `postnatal` is assumed.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@satra suggested this ontology https://bioportal.bioontology.org/ontologies/FMA/?p=classes&conceptid=http://purl.org/sig/ont/fma/fma312872 (in #1634) however this looks not like a species independent definition (definitions are also very sparse in this ontology)

name: age_type
display_name: Age type
description: |
Type of age measurement (e.g. `postnatal`, `fetal`, `gestational`). If not specified, `postnatal` is assumed.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fertilization
UBERON: http://purl.obolibrary.org/obo/GO_0009566
Definition: "The union of gametes of opposite sexes during the process of sexual reproduction to form a zygote. It involves the fusion of the gametic nuclei (karyogamy) and cytoplasm (plasmogamy)."

OR

We suggest a new UBERON term for the life cycle temporal boundaries:
start of embryo stage
UBERON: REQUEST TO ADD
Adapted definition for the usage here: "A life cycle temporal boundary that marks the start of the embryo stage of the organism."


start of neonate stage (synonym: birth)
UBERON: http://purl.obolibrary.org/obo/UBERON_0035946
Definition: "A life cycle temporal boundary that marks the start of the neonate stage of the organism."


Gestation is not covered in UBERON, but we can maybe request to add these terms:

gestational stage (life cycle stage)
UBERON: REQUEST TO ADD
Definition: "A life cycle stage that starts with the first day of the mother's last menstrual period and ends with birth."

start of gestational stage (life cycle boundary)
UBERON: REQUEST TO ADD
Definition: "A life cycle temporal boundary that marks the start of the gestational stage of the organism."

@effigies
Copy link
Collaborator

effigies commented Jun 12, 2025

If Reference is added to column definition objects...

{
  "age": {"Units": "years", "Reference": "birth"}
}

We can add a check in schema.rules.checks.something

AgeReferenceEnumeration:
  issue:
   ...
  selectors:
    - columns.age
    - type(sidecar.age.Reference) != 'null'
  checks:
    - intersects([sidecar.age.Reference], ['birth', 'gestational', 'fertilization'])

Edit:

Reference would need to be defined in schema.objects.metadata and then added to

{{ MACROS___make_metadata_table(
{
"LongName": "OPTIONAL",
"Description": (
"RECOMMENDED",
"The description of the column.",
),
"Levels": "RECOMMENDED",
"Units": "RECOMMENDED",
"Delimiter": "OPTIONAL",
"TermURL": "RECOMMENDED",
"HED": "OPTIONAL",
}
) }}

@bendichter
Copy link
Contributor

Summary of conversation with @effigies

age:
name: age
display_name: Subject age
description: |
Numeric value in years (float or integer value).
It is recommended to tag participant ages that are 89 or higher as 89+,
for privacy purposes.
definition: {
"LongName": "Subject age",
"Description": "Subject age in postnatal years",
"Units": "year",
}

While this section of the schema specifies that age is in years, this is just default behavior. The description and units are overridden by entries in the participants.json file. If the validator does not respect this then it's a bug in the validator. The field that says "definition" is intended to be default (even though the name might suggest that it is not adjustable).

@effigies also recommended that we add "Reference" as a field of "age" in the participants.json file. We can use custom check logic to constrain the value to birth, gestational, or fertilization. We just need to add Reference as a field in bids-specification/src/common-principles.md

Comment on lines +61 to +66
participants:
selectors:
- path == "/participants.json"
- '"age" in columns'
fields:
AgeReference: recommended
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this fit with #1839 (comment) ?

If yes this should also recommend age unit not only the age reference

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if this is also the place for defining schema.rules.checks.something suggestion from #1839 (comment)

Copy link

@lzehl lzehl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can also do the changes but I wanted to have a record of the open TODOs based on the latest decision. Final TODO: update bids-specification/src/common-principles.md according to #1839 (comment)

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

birth, fertilization and gestation deleted from the enums

@lzehl
Copy link

lzehl commented Sep 3, 2025

STATUS/TODOS:

  • resolve conflicts in columns.yaml
  • add age reference to definition of age in columns.yaml
  • add age reference values back into enums.yaml (birth, fertilization, LMPstartdate???)
  • add AgeReference to common-principles.md
  • add AgeReference to metadata.yaml
  • add age reference and unit rules to schema.rules.checks.something ???

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants